<?php

/*
	[UCenter] (C)2001-2099 Comsenz Inc.
	This is NOT a freeware, use is subject to license terms

	$Id: pm.php 1067 2011-03-08 10:06:51Z svn_project_zhangjie $
*/

! defined ( 'IN_UC' ) && exit ( 'Access Denied' );

define ( 'PRIVATEPMTHREADLIMIT_ERROR', - 1 );
define ( 'PMFLOODCTRL_ERROR', - 2 );
define ( 'PMMSGTONOTFRIEND', - 3 );
define ( 'PMSENDREGDAYS', - 4 );
define ( 'CHATPMTHREADLIMIT_ERROR', - 5 );
define ( 'CHATPMMEMBERLIMIT_ERROR', - 7 );

class pmcontrol extends base {

	function __construct() {

		$this->pmcontrol ();
	}

	function pmcontrol() {

		parent::__construct ();
		$this->load ( 'user' );
		$this->load ( 'pm' );
	}

	function oncheck_newpm() {

		$this->init_input ();
		$uid = intval ( $this->input ( 'uid' ) );
		$more = intval ( $this->input ( 'more' ) );
		if (! $_ENV ['pm']->isnewpm ( $uid ) && ! $more) {
			return 0;
		}
		$newprvpm = $_ENV ['pm']->getpmnum ( $uid, 1, 1 );
		$newchatpm = $_ENV ['pm']->getpmnum ( $uid, 2, 1 );
		$newpm = $newprvpm + $newchatpm;
		if ($more == 0) {
			return $newpm;
		}
		elseif ($more == 1) {
			return array ( 
				'newpm' => $newpm , 'newprivatepm' => $newprvpm 
			);
		}
		elseif ($more == 2 || $more == 3) {
			if ($more == 2) {
				return array ( 
					'newpm' => $newpm , 'newprivatepm' => $newprvpm , 'newchatpm' => $newchatpm 
				);
			}
			else {
				$lastpm = $_ENV ['pm']->lastpm ( $uid );
				require_once UC_ROOT . 'lib/uccode.class.php';
				$this->uccode = new uccode ();
				$lastpm ['lastsummary'] = $this->uccode->complie ( $lastpm ['lastsummary'] );
				return array ( 
					'newpm' => $newpm , 'newprivatepm' => $newprvpm , 'newchatpm' => $newchatpm , 'lastdate' => $lastpm ['lastdateline'] , 'lastmsgfromid' => $lastpm ['lastauthorid'] , 'lastmsgfrom' => $lastpm ['lastauthorusername'] , 'lastmsg' => $lastpm ['lastsummary'] 
				);
			}
		}
		elseif ($more == 4) {
			return array ( 
				'newpm' => $newpm , 'newprivatepm' => $newprvpm , 'newchatpm' => $newchatpm 
			);
		}
		else {
			return 0;
		}
	}

	function onsendpm() {

		$this->init_input ();
		$fromuid = $this->input ( 'fromuid' );
		$msgto = $this->input ( 'msgto' );
		$subject = $this->input ( 'subject' );
		$message = $this->input ( 'message' );
		$replypmid = $this->input ( 'replypmid' );
		$isusername = $this->input ( 'isusername' );
		$type = $this->input ( 'type' );
		
		if (! $fromuid) {
			return 0;
		}
		
		$user = $_ENV ['user']->get_user_by_uid ( $fromuid );
		$user = daddslashes ( $user, 1 );
		if (! $user) {
			return 0;
		}
		$this->user ['uid'] = $user ['uid'];
		$this->user ['username'] = $user ['username'];
		
		if ($replypmid) {
			$isusername = 0;
			$plid = $_ENV ['pm']->getplidbypmid ( $replypmid );
			$msgto = $_ENV ['pm']->getuidbyplid ( $plid );
			unset ( $msgto [$this->user ['uid']] );
		}
		else {
			if (! empty ( $msgto )) {
				$msgto = array_unique ( explode ( ',', $msgto ) );
			}
		}
		
		if ($isusername) {
			$msgto = $_ENV ['user']->name2id ( $msgto );
		}
		$countmsgto = count ( $msgto );
		
		if ($this->settings ['pmsendregdays']) {
			if ($user ['regdate'] > $this->time - $this->settings ['pmsendregdays'] * 86400) {
				return PMSENDREGDAYS;
			}
		}
		if ($this->settings ['chatpmmemberlimit']) {
			if ($type == 1 && ($countmsgto > ($this->settings ['chatpmmemberlimit'] - 1))) {
				return CHATPMMEMBERLIMIT_ERROR;
			}
		}
		if ($this->settings ['pmfloodctrl']) {
			if (! $_ENV ['pm']->ispminterval ( $this->user ['uid'], $this->settings ['pmfloodctrl'] )) {
				return PMFLOODCTRL_ERROR;
			}
		}
		if ($this->settings ['privatepmthreadlimit']) {
			if (! $_ENV ['pm']->isprivatepmthreadlimit ( $this->user ['uid'], $this->settings ['privatepmthreadlimit'] )) {
				return PRIVATEPMTHREADLIMIT_ERROR;
			}
		}
		if ($this->settings ['chatpmthreadlimit']) {
			if (! $_ENV ['pm']->ischatpmthreadlimit ( $this->user ['uid'], $this->settings ['chatpmthreadlimit'] )) {
				return CHATPMTHREADLIMIT_ERROR;
			}
		}
		
		$lastpmid = 0;
		if ($replypmid) {
			$lastpmid = $_ENV ['pm']->replypm ( $plid, $this->user ['uid'], $this->user ['username'], $message );
		}
		else {
			$lastpmid = $_ENV ['pm']->sendpm ( $this->user ['uid'], $this->user ['username'], $msgto, $subject, $message, $type );
		}
		return $lastpmid;
	}

	function ondelete() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$pmids = $this->input ( 'pmids' );
		if (empty ( $pmids )) {
			return 0;
		}
		if (is_array ( $pmids )) {
			$this->apps = $this->cache ( 'apps' );
			if ($this->apps [$this->app ['appid']] ['type'] == 'UCHOME') {
				$id = $_ENV ['pm']->deletepmbyplids ( $this->user ['uid'], $this->input ( 'pmids' ) );
			}
			else {
				$id = $_ENV ['pm']->deletepmbypmids ( $this->user ['uid'], $this->input ( 'pmids' ) );
			}
		}
		else {
			$id = $_ENV ['pm']->deletepmbypmid ( $this->user ['uid'], $this->input ( 'pmids' ) );
		}
		return $id;
	}

	function ondeletechat() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$plids = $this->input ( 'plids' );
		$type = intval ( $this->input ( 'type' ) );
		if ($type == 1) {
			return $_ENV ['pm']->deletepmbyplids ( $this->user ['uid'], $plids );
		}
		else {
			return $_ENV ['pm']->quitchatpm ( $this->user ['uid'], $plids );
		}
	}

	function ondeleteuser() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$id = $_ENV ['pm']->deletepmbyplids ( $this->user ['uid'], $this->input ( 'touids' ), 1 );
		return $id;
	}

	function onreadstatus() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$_ENV ['pm']->setpmstatus ( $this->user ['uid'], $this->input ( 'uids' ), $this->input ( 'plids' ), $this->input ( 'status' ) );
	}

	function onignore() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		return $_ENV ['pm']->set_ignore ( $this->user ['uid'] );
	}

	function onls() {

		$this->init_input ();
		$pagesize = $this->input ( 'pagesize' );
		$filter = $this->input ( 'filter' );
		$page = $this->input ( 'page' );
		$msglen = $this->input ( 'msglen' );
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		
		$filter = $filter ? (in_array ( $filter, array ( 
			'newpm' , 'privatepm' 
		) ) ? $filter : '') : '';
		if ($filter == 'newpm') {
			$type = 0;
			$new = 1;
			/*
		} elseif($filter == 'privatepm') {
			$type = 1;
			$new = 0;
		} elseif($filter == 'chatpm') {
			$type = 2;
			$new = 0;
*/
		}
		elseif ($filter == 'privatepm') {
			$type = 0;
			$new = 0;
		}
		else {
			return array ();
		}
		$pmnum = $_ENV ['pm']->getpmnum ( $this->user ['uid'], $type, $new );
		$start = $this->page_get_start ( $page, $pagesize, $pmnum );
		
		if ($pagesize > 0) {
			$pms = $_ENV ['pm']->getpmlist ( $this->user ['uid'], $filter, $start, $pagesize );
			if (is_array ( $pms ) && ! empty ( $pms )) {
				foreach ( $pms as $key => $pm ) {
					if ($msglen) {
						$pms [$key] ['lastsummary'] = $_ENV ['pm']->removecode ( $pms [$key] ['lastsummary'], $msglen );
					}
					else {
						unset ( $pms [$key] ['lastsummary'] );
					}
				}
			}
			$result ['data'] = $pms;
		}
		$result ['count'] = $pmnum;
		return $result;
	}

	function onview() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$pmid = $this->input ( 'pmid' );
		$touid = $this->input ( 'touid' );
		$daterange = $this->input ( 'daterange' );
		$page = $this->input ( 'page' );
		$pagesize = $this->input ( 'pagesize' );
		$isplid = $this->input ( 'isplid' );
		$type = $this->input ( 'type' );
		
		$daterange = empty ( $daterange ) ? 1 : $daterange;
		$today = $this->time - ($this->time + $this->settings ['timeoffset']) % 86400;
		if ($daterange == 1) {
			$starttime = $today;
		}
		elseif ($daterange == 2) {
			$starttime = $today - 86400;
		}
		elseif ($daterange == 3) {
			$starttime = $today - 172800;
		}
		elseif ($daterange == 4) {
			$starttime = $today - 604800;
		}
		elseif ($daterange == 5) {
			$starttime = 0;
		}
		$endtime = $this->time;
		
		if (! $isplid) {
			$plid = $_ENV ['pm']->getplidbytouid ( $this->user ['uid'], $touid );
		}
		else {
			$plid = $touid;
		}
		if ($page) {
			$pmnum = $_ENV ['pm']->getpmnumbyplid ( $this->user ['uid'], $plid );
			$start = $this->page_get_start ( $page, $pagesize, $pmnum );
			$ppp = $pagesize;
		}
		else {
			$pmnum = 0;
			$start = 0;
			$ppp = 0;
		}
		
		if ($pmid) {
			$pms = $_ENV ['pm']->getpmbypmid ( $this->user ['uid'], $pmid );
		}
		else {
			$pms = $_ENV ['pm']->getpmbyplid ( $this->user ['uid'], $plid, $starttime, $endtime, $start, $ppp, $type );
		}
		
		require_once UC_ROOT . 'lib/uccode.class.php';
		$this->uccode = new uccode ();
		if ($pms) {
			foreach ( $pms as $key => $pm ) {
				$pms [$key] ['message'] = $this->uccode->complie ( $pms [$key] ['message'] );
			}
		}
		return $pms;
	}

	function onviewnum() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$touid = $this->input ( 'touid' );
		$isplid = $this->input ( 'isplid' );
		if (! $isplid) {
			$plid = $_ENV ['pm']->getplidbytouid ( $this->user ['uid'], $touid );
		}
		else {
			$plid = $touid;
		}
		$pmnum = $_ENV ['pm']->getpmnumbyplid ( $this->user ['uid'], $plid );
		return $pmnum;
	}

	function onviewnode() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$type = $this->input ( 'type' );
		$pmid = $this->input ( 'pmid' );
		$type = 0;
		$pms = $_ENV ['pm']->getpmbypmid ( $this->user ['uid'], $pmid );
		
		require_once UC_ROOT . 'lib/uccode.class.php';
		$this->uccode = new uccode ();
		if ($pms) {
			foreach ( $pms as $key => $pm ) {
				$pms [$key] ['message'] = $this->uccode->complie ( $pms [$key] ['message'] );
			}
		}
		$pms = $pms [0];
		return $pms;
	}

	function onchatpmmemberlist() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$plid = intval ( $this->input ( 'plid' ) );
		return $_ENV ['pm']->chatpmmemberlist ( $this->user ['uid'], $plid );
	}

	function onkickchatpm() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$plid = intval ( $this->input ( 'plid' ) );
		$touid = intval ( $this->input ( 'touid' ) );
		return $_ENV ['pm']->kickchatpm ( $plid, $this->user ['uid'], $touid );
	}

	function onappendchatpm() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$plid = intval ( $this->input ( 'plid' ) );
		$touid = intval ( $this->input ( 'touid' ) );
		return $_ENV ['pm']->appendchatpm ( $plid, $this->user ['uid'], $touid );
	}

	function onblackls_get() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		return $_ENV ['pm']->get_blackls ( $this->user ['uid'] );
	}

	function onblackls_set() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$blackls = $this->input ( 'blackls' );
		return $_ENV ['pm']->set_blackls ( $this->user ['uid'], $blackls );
	}

	function onblackls_add() {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$username = $this->input ( 'username' );
		return $_ENV ['pm']->update_blackls ( $this->user ['uid'], $username, 1 );
	}

	function onblackls_delete($arr) {

		$this->init_input ();
		$this->user ['uid'] = intval ( $this->input ( 'uid' ) );
		$username = $this->input ( 'username' );
		return $_ENV ['pm']->update_blackls ( $this->user ['uid'], $username, 2 );
	}
}

?>